package com.itheima.service.impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.itheima.common.entity.PageResult;
import com.itheima.common.entity.QueryPageBean;
import com.itheima.dao.CheckGroupDao;
import com.itheima.dao.CheckItemDao;
import com.itheima.dao.Check_ItemAndGroup;
import com.itheima.pojo.CheckGroup;
import com.itheima.pojo.CheckItem;
import com.itheima.service.CheckGroupService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 32338
 * @date 2024-05-03 19:13:07
 * @description 服务层
 */
@Service
public class CheckGroupServiceImpl implements CheckGroupService {

    @Autowired
    private CheckGroupDao checkGroupDao;

    @Autowired
    private Check_ItemAndGroup checkItemAndGroup;

    @Autowired
    private CheckItemDao checkItemDao;

    /**
     * @description
     ***:新增检查组
     **/
    @Transactional
    public void save(CheckGroup checkGroup, List<Integer> checkitemIds) {
        List<CheckItem> checkItemList  = new ArrayList<>();

        if (checkitemIds != null && checkitemIds.size()>0){
            //插入检查组的同时也要把包含的检查项给代入进去
            for (Integer id : checkitemIds) {
                CheckItem checkItem = checkItemDao.findById(id);
                    checkItemList.add(checkItem);
            }

        }
        checkGroup.setCheckItems(checkItemList);
        checkGroupDao.save(checkGroup);//插入检查组数据并且要返回id
        Integer checkGroupId = checkGroup.getId();
        checkItemAndGroup.save(checkGroupId,checkitemIds);//中间表插入数据


    }

    /**
     * @description
     ***:删除检查组
     **/
    @Transactional
    public void deleteById(Integer id) {
        //从前端传过来的id来查询检查组
        checkGroupDao.deleteById(id);
        //根据检查组id删除检查项与检查组的中间表数据
        checkItemAndGroup.deleteByGroupId(id);

    }

    /**
     * @description
     ***:根据检查组id查询关联的检查项id
     **/
    @Override
    public List<Integer> findItemIdsByGroupId(Integer checkGroupId) {
        return checkItemAndGroup.findItemIdsByGroupId(checkGroupId);
    }

    /**
     * @description
     ***:修改检查组
     **/
    @Transactional
    public void edit(CheckGroup checkGroup, List<Integer> checkitemIds) {

        checkGroupDao.edit(checkGroup);
        //修改的同时也要修改中间表
        Integer checkGroupId = checkGroup.getId();
        checkItemAndGroup.deleteByGroupId(checkGroupId);
        //前后端联调时遇到的问题：一：在数据库层数据命名没有规范，二：前端传入的数据不存在的时候也会报错
        checkItemAndGroup.save(checkGroupId, checkitemIds);//中间表插入数据

    }

    /**
     * @description
     ***:分页查询检查组
     **/
    public PageResult page(QueryPageBean queryPageBean) {
        PageHelper.startPage(queryPageBean.getCurrentPage(),queryPageBean.getPageSize());

        Page<CheckGroup> page = checkGroupDao.page(queryPageBean.getQueryString());

        return new PageResult(page.getTotal(),page.getResult());
    }
    /**
     * @description
     ***:查询所有检查组
     **/
    public List<CheckGroup> findAll() {
        return checkGroupDao.findAll();
    }

    /**
     * @description
     ***:根据id查询检查组
     *
     * @return*/
    public CheckGroup findById(Integer id) {
        return checkGroupDao.findById(id);
    }
}
